package com.crm.system.service.contractManager;

import com.alibaba.fastjson.JSONObject;
import com.crm.common.model.DhPageInfo;
import com.crm.model.entity.contractManager.CustomerContract;
import com.crm.model.qo.contractManager.ContractContactUpdateQO;
import com.crm.model.qo.contractManager.CustomerContractAddQO;
import com.crm.model.qo.contractManager.CustomerContractQO;
import com.crm.model.qo.contractManager.CustomerContractUpdateQO;
import com.crm.model.qo.contractReviewManager.ContractReviewDetailQO;
import com.crm.model.vo.customerContractManager.*;
import com.crm.model.vo.datasearch.DataSearchResultVO;
import com.crm.model.vo.returnMoney.CustFinanceProductOderVO;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.text.ParseException;
import java.util.List;

/**
 * @author yincuimei
 * @Date 2021/3/12 10:00
 * 合同管理
 */
public interface CustomerContractService {

    /**
     * (超级管理员、普通管理员、普通用户)合同管理--合同列表
     * @param customerContractQO       ---合同列表查询参数
     * @param pageIndex/ pageSize      ---页码、分页大小
     * @param sortName/sortOrder       ---合同列表排序字段及规则
     * @param permissionType           ---权限类型(1:超级管理员;2:普通管理员)
     * @author yincuimei
     * @return
     */
    DhPageInfo<CustomerContractVO> selectCustomerContractVOList(CustomerContractQO customerContractQO, Integer pageIndex, Integer pageSize, String sortName, String sortOrder,String permissionType);

   /**
     * (用户系统)合同管理--合同列表
     * @param customerContractQO  ---查询条件
     * @param pageIndex/ pageSize ---页码/分页大小
     * @param sortName/sortOrder  ---合同列表排序字段及规则
     * @return
     */
    DhPageInfo<CustomerContractVO> selectUserCustomerContractVOList(CustomerContractQO customerContractQO, Integer pageIndex, Integer pageSize, String sortName, String sortOrder);



    /**
     * @Description: 查询单品合同列表
     * @Param: [customerContractQO, pageIndex, pageSize, sortName, sortOrder]
     * @Return: com.crm.common.model.DhPageInfo<com.crm.model.vo.customerContractManager.CustomerContractVO>
     * @Author: lixq-f
     * @Date: 2021/6/17
    **/
    DhPageInfo<CustomerContractVO> selectSingleContractList(CustomerContractQO customerContractQO,
                                                            Integer pageIndex, Integer pageSize,
                                                            String sortName, String sortOrder);



    /**
     * 合同列表--查看(根据合同ID查询合同详情)
     * @param contractId  ---合同ID
     * @author yincuimei
     * @return
     */
    CustomerContractDetailVO selectCustomerContractVODetail(String contractId);

    /**
     * 合同列表--作废(根据合同ID作废合同-未生效的合同可以作废)
     * @param contractId     ---合同ID
     * @param contractStatus ---合同作废状态
     * @author yincuimei
     * @return
     */
    JSONObject cancelCustomerContract(String contractId,String contractStatus);

    /**
     * 合同详情(用户系统)--上传补充材料》只有审核处理结果为补充材料;合同状态为审核中的才可以上传
     * @author yincuimei
     * @return
     */
    Boolean updateContractReplenishAnnex(CustomerContract customerContract, MultipartFile file)throws Exception;

    /**
     * 根据客户id查询合同列表
     * @param customerId 客户id
     * @author luojie
     * @return
     */
    List<CustomerContractVO> selectContractListByCustomerId(String customerId);

    /***
     * @Description:
     * @Param:
     * @Author: luojie
     * @Date: 2021/8/24 14:36
     */
    List<JSONObject> selectContractCoDeveloperById(String contractId);

    /**
     * 新建合同
     * @param customerContractAddQO 合同添加的QO对象
     * @author luojie
     * @return
     */
    Boolean addContractInformation(CustomerContractAddQO customerContractAddQO) throws ParseException, IOException;

    /***
     * @Description: 根据合同id查询编辑合同页面回显的值
     * @Param:  * @param contractId 合同id
     * @Author: luojie
     * @Date: 2021/3/22 15:11
     */
    CustomerContractEditVO selectCustomerContractEditByContractId(String contractId);

    /***
     * @Description: 审核管理-更新合同详情
     * @Author: luojie
     * @Date: 2021/3/31 8:55
     */
    Boolean updateContractReviewDetail(ContractReviewDetailQO contractReviewDetailQO);

    /**
     * 联系人详情-订单合同-通过联系人id
     * @param pageIndex 页码
     * @param pageSize 分页大小
     * @param sortName 排序列名字
     * @param sortOrder 排序
     * @param contactId 联系人id
     * @param contractNumber 合同编号
     * @return
     */
    DhPageInfo<ContactDetailByCustomerContractVO> selectCustomerContractByContactId(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String contactId, String contractNumber);

    /**
     * @Description:商机添加合同赋值
     * @Param:  * @param customerContractAddQO 添加合同赋值
     * @return
     */
    CustomerContractEditVO opportunityContractDetail(String opportunityId,String contractType);

    /***
     * @Description: 根据合同id查询合同续费信息
     * @Param:contractId 合同id
     * @Author: luojie
     * @Date: 2021/4/15 16:54
     */
    ContractRenewalVO selectContractRenewalInformation(String contractId,Integer pageIndex,Integer pageSize);

    /***
     * @Description:根据合同id查询合同信息
     * @Param: contractId 合同id
     * @Author: luojie
     * @Date: 2021/4/19 8:38
     */
    ContractRenewalAddVO selectContractById(String contractId);

    /***
     * @Description:根据合同编号查询合同续费信息
     * @Param:contractNumber 合同编号
     * @Author: luojie
     * @Date: 2021/6/1 14:45
     */
    ContractRenewalAddVO selectContractByContractNumber(String contractNumber);

    /***
     * @Description: 查询未回款合同
     * @Author: luojie
     * @Date: 2021/4/26 9:47
     */
    DhPageInfo<ContractUnpaidVO> selectUnpaidContract();

    /**
     * 商机详情-查询商机客户下面未过期的合同
     * @param customerId 客户id
     * @return
     */
    List<CustomerContractVO> opportunityCustomerContract(String customerId);


    /**
     * @Description: 通过合同编号获取数据
     * @Param: [contractNum]
     * @Return: java.util.List<com.crm.model.vo.datasearch.DataSearchResultVO>
     * @Author: lixq-f
     * @Date: 2021/5/13
    **/
    List<DataSearchResultVO> selectDataByContractNum(String contractNum);

    /**
     * 业务员更新审核失败合同
     * @param customerContractUpdateQO
     * @return
     */
    Boolean updateReviewFailedContract(CustomerContractUpdateQO customerContractUpdateQO);

    /***
     * @Description:根据订单id查询订单表中数据
     * @Param:
     * @Author: luojie
     * @Date: 2021/8/3 16:41
     */
    DhPageInfo<CustFinanceProductOderVO> getMemberProductList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String orderId, String productCategories);

    /***
     * @Description: 获取合同联系人列表
     * @Param: customerId 客户id
     * @Author: luojie
     * @Date: 2021/9/2 10:09
     */
    DhPageInfo<ContractContactVO> selectContractContactList(String customerId, Integer pageIndex, Integer pageSize, String sortName, String sortOrder,String auditStatus,String onTheJobSituation);

    /***
     * @Description:根据合同id更新合同联系人
     * @Param:
     * @Author: luojie
     * @Date: 2021/9/2 22:55
     */
    Boolean updateContractContactByContractId(ContractContactUpdateQO contractContactUpdateQO);

   /**
    * 合同的一些调整
    * @param contractNumber 合同编号
    * @param orderNumber 订单编号
    * @param customerName 客户名称
    * @param userName 用户名称
    * @param bs  1调整生效合同 2补全客户信息和登录人信息 3补全客户信息 4补全登录人信息
    * @return
    */
    String adjustmentContract(String contractNumber, String orderNumber, String customerName, String userName, String bs);
}
